/*
 * Copyright (c) 2010 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.google.api.data.calendar.v2.model;

import com.google.api.client.util.Key;

/**
 * Represents a base GCalendar SettingsProperty Entry.
 * 
 * @author Alain Vongsouvanh
 */
public class SettingsProperty {

  /**
   * Whether alternate calendar view is used and which one.
   * {@link #ALTERNATE_CALENDAR_NOTUSED} if alternate view is not used.
   * {@link #ALTERNATE_CALENDAR_HIJRI} for standard Hijri calendar,
   * {@link #ALTERNATE_CALENDAR_KUWAITI_HIJRI} for Kuwaiti Hijri calendar,
   * {@link #ALTERNATE_CALENDAR_SAUDI_HIJRI} for Saudi Hijri calendar.
   */
  public static final String PROPERTY_ALTERNATE_CALENDAR = "alternateCalendar";
  /** User country selected for time zone display. ISO two-letter country code. */
  public static final String PROPERTY_COUNTRY = "country";
  /**
   * The number of days to display in custom calendar view mode.
   * {@code custom,days} where days is the number of days to display.
   */
  public static final String PROPERTY_CUSTOM_CALMODE = "customCalMode";
  /**
   * User's desired date format to use in Calendar UI. One of the following
   * values: {@link #DATE_FIELD_ORDER_DMY} (day/month/year),
   * {@link #DATE_FIELD_ORDER_MDY}, {@link #DATE_FIELD_ORDER_YMD}.
   */
  public static final String PROPERTY_DATE_FIELD_ORDER = "dateFieldOrder";
  /**
   * The default calendar view to display. {@link #DEFAULT_CALMODE_DAY} for day
   * view, {@link #DEFAULT_CALMODE_WEEK} for week view,
   * {@link #DEFAULT_CALMODE_MONTH} for month view,
   * {@link #DEFAULT_CALMODE_LIST} for agenda view,
   * {@link #DEFAULT_CALMODE_CUSTOM} for custom view. See
   * {@link #PROPERTY_CUSTOM_CALMODE} property.
   */
  public static final String PROPERTY_DEFAULT_CALMODE = "defaultCalMode";
  /**
   * Indicates whether all time zones are visible in Calendar Settings
   * regardless of selected country. Possible values are {@code true} or
   * {@code false}.
   */
  public static final String PROPERTY_DISPLAY_ALL_TIMEZONES = "displayAllTimezones";
  /**
   * Indicates whether 24-hour format is used in Calendar UI. Possible values
   * are {@code true} or {@code false}.
   */
  public static final String PROPERTY_FORMAT24HOURTIME = "format24HourTime";
  /**
   * Whether to hide event invitations which are not yet accepted. Possible
   * values are {@code true} or {@code false}.
   */
  public static final String PROPERTY_HIDE_INVITATIONS = "hideInvitations";
  /**
   * Whether to display weekends. Possible values are {@code true} or
   * {@code false}.
   */
  public static final String PROPERTY_HIDE_WEEKENDS = "hideWeekends";
  /** Currently selected Calendar interface language. ISO 639-1 Language Code. */
  public static final String PROPERTY_LOCALE = "locale";
  /**
   * Whether to display declined events. Possible values are {@code true} or
   * {@code false}.
   */
  public static final String PROPERTY_SHOW_DECLINED_EVENTS = "showDeclinedEvents";
  /**
   * User time zone. This is not a time zone of any calendar, but the time zone
   * in which events appear on Calendar UI.
   */
  public static final String PROPERTY_TIMEZONE = "timezone";
  /** Custom time zone label if specfied by user. */
  public static final String PROPERTY_TIMEZONE_LABEL = "timezoneLabel";
  /** User location, used to display weather. */
  public static final String PROPERTY_USER_LOCATION = "userLocation";
  /**
   * Whether to show weather based on location, and weather format to use.
   * Possible values are {@code true} or {@code false}.
   */
  public static final String PROPERTY_WEATHER = "weather";
  /**
   * Indicates the day of the week that the week starts on in Calendar UI.
   * {@code Integer} from {@code 0} to {@code 6}, {@code 0} for Sunday.
   */
  public static final String PROPERTY_WEEK_START = "weekStart";

  /** Possible value for {@link #PROPERTY_ALTERNATE_CALENDAR}. */
  public static final String ALTERNATE_CALENDAR_NOTUSED = "0";
  /** Possible value for {@link #PROPERTY_ALTERNATE_CALENDAR}. */
  public static final String ALTERNATE_CALENDAR_HIJRI = "1";
  /** Possible value for {@link #PROPERTY_ALTERNATE_CALENDAR}. */
  public static final String ALTERNATE_CALENDAR_KUWAITI_HIJRI = "2";
  /** Possible value for {@link #PROPERTY_ALTERNATE_CALENDAR}. */
  public static final String ALTERNATE_CALENDAR_SAUDI_HIJRI = "3";

  /** Possible value for {@link #PROPERTY_DEFAULT_CALMODE}. */
  public static final String DEFAULT_CALMODE_DAY = "day";
  /** Possible value for {@link #PROPERTY_DEFAULT_CALMODE}. */
  public static final String DEFAULT_CALMODE_WEEK = "week";
  /** Possible value for {@link #PROPERTY_DEFAULT_CALMODE}. */
  public static final String DEFAULT_CALMODE_MONTH = "month";
  /** Possible value for {@link #PROPERTY_DEFAULT_CALMODE}. */
  public static final String DEFAULT_CALMODE_LIST = "list";
  /** Possible value for {@link #PROPERTY_DEFAULT_CALMODE}. */
  public static final String DEFAULT_CALMODE_CUSTOM = "custom";

  /** Possible value for {@link #PROPERTY_DATE_FIELD_ORDER}. */
  public static final String DATE_FIELD_ORDER_DMY = "dmy";
  /** Possible value for {@link #PROPERTY_DATE_FIELD_ORDER}. */
  public static final String DATE_FIELD_ORDER_MDY = "mdy";
  /** Possible value for {@link #PROPERTY_DATE_FIELD_ORDER}. */
  public static final String DATE_FIELD_ORDER_YMD = "ymd";

  @Key("@name")
  public String name;

  @Key("@value")
  public String value;
}
